// RAP [rh] DnD not implemented ///******************************************************************************* // * Copyright (c) 2005, 2007 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * IBM Corporation - initial API and implementation // *******************************************************************************/ //package org.eclipse.ui.internal.dnd; // //import org.eclipse.jface.util.Geometry; //import org.eclipse.swt.SWT; //import org.eclipse.swt.events.PaintEvent; //import org.eclipse.swt.events.PaintListener; //import org.eclipse.swt.graphics.Color; //import org.eclipse.swt.graphics.Point; //import org.eclipse.swt.graphics.RGB; //import org.eclipse.swt.graphics.Rectangle; //import org.eclipse.swt.widgets.Canvas; //import org.eclipse.swt.widgets.Composite; //import org.eclipse.swt.widgets.Control; //import org.eclipse.ui.themes.ColorUtil; // ///** // * Utility class that wraps a given control with a black 'border'. Moving the // * border control will cause the given control to move to stay within its bounds. // * // * @since 3.2 // * // */ //public class DragBorder { // // Controls // private Composite clientControl = null; // private Control dragControl = null; // private Canvas border = null; // // // Colors // private Color baseColor; // private Color hilightColor; // private boolean isHighlight; // // /** // * Construct a new DragBorder. // * // * @param client The client window that the border must stay within // * @param toDrag The control to be placed 'inside' the border // */ // public DragBorder(Composite client, Control toDrag, boolean provideFrame) { // clientControl = client; // dragControl = toDrag; // Point dragSize = toDrag.getSize(); // // // Create a control large enough to 'contain' the dragged control // border = new Canvas(dragControl.getParent(), SWT.NONE); // border.setSize(dragSize.x+2, dragSize.y+2); // // // Use the SWT 'title' colors since they should always have a proper contrast // // and are 'related' (i.e. should look good together) // baseColor = border.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION); // RGB background = border.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB(); // RGB blended = ColorUtil.blend(baseColor.getRGB(), background); // hilightColor = new Color(border.getDisplay(), blended); // // // Ensure the border is visible and the control is 'above' it... // border.moveAbove(null); // dragControl.moveAbove(null); // // if (provideFrame) { // border.addPaintListener(new PaintListener() { // public void paintControl(PaintEvent e) { // if (isHighlight) { // e.gc.setForeground(hilightColor); // } // else { // e.gc.setForeground(baseColor); // } // // // Draw a rectangle as our 'border' // Rectangle bb = border.getBounds(); // e.gc.drawRectangle(0,0,bb.width-1, bb.height-1); // } // }); // } // } // // // /** // * Move the border (and its 'contained' control to a new position. The new // * position will be adjusted to lie entirely within the client area of the // * <code>clientControl</code>. // * // * @param newPos The new position for the border // * @param alignment The location of the cursor relative to the border being dragged. // * Current implementation only recognizes SWT.TOP & SWT.BOTTOM (which implies SWT.LEFT) // * and SWT.CENTER (which centers teh dragged border on the cursor. // */ // public void setLocation(Point newPos, int alignment) { // // Move the border but ensure that it is still inside the Client area // if (alignment == SWT.CENTER) { // Point size = border.getSize(); // border.setLocation(newPos.x - (size.x/2), newPos.y - (size.y/2)); // } // else if (alignment == SWT.TOP) { // border.setLocation(newPos.x, newPos.y); // } else { // border.setLocation(newPos.x, newPos.y - border.getSize().y); // } // // // Force the control to remain inside the shell // Rectangle bb = border.getBounds(); // Rectangle cr = clientControl.getClientArea(); // Geometry.moveInside(bb,cr); // // // Ensure that the controls are the 'topmost' controls // border.moveAbove(null); // dragControl.moveAbove(null); // // // OK, now move the drag control and the border to their new locations // dragControl.setLocation(bb.x+1, bb.y+1); // border.setBounds(bb); // } // // /** // * Sets the hilight 'mode' for the control. // * @param highlight true if the border should be drawn as 'hilighted' // */ // public void setHighlight(boolean highlight) { // isHighlight = highlight; // border.redraw(); // } // // /** // * Dispose the controls owned by the border. // */ // public void dispose() { // hilightColor.dispose(); // border.dispose(); // } // // // /** // * @return The bounds of the border's control. // */ // public Rectangle getBounds() { // return border.getBounds(); // } //}